package utils

import (
	"crypto/rand"
	"fmt"
	"gopkg.in/gomail.v2"
	"partyus_app/global"
	"time"
)

// 163 邮箱账户信息
var hostEmail = "o13425083773@163.com"
var hostPassword = "EHg2JCTjfXetUdhU"

// GenerateCode 生成6位数字验证码
func GenerateCode() (string, error) {
	b := make([]byte, 3)
	if _, err := rand.Read(b); err != nil {
		return "", err
	}
	return fmt.Sprintf("%06d", int(b[0])<<16|int(b[1])<<8|int(b[2])), nil
}

// SendVerificationEmail 生成验证码并发送邮件
func SendVerificationEmail(email string) (string, error) {
	fmt.Println("邮箱：", email)
	code, err := GenerateCode()
	if err != nil {
		return "", err
	}

	// 将验证码存储到 Redis，有效期为5分钟
	if err := global.RedisDB.Set(email, code, 5*time.Minute).Err(); err != nil {
		fmt.Println("Redis操作失败:", err) // 输出错误信息到控制台
		return "", err
	}

	// 配置并发送邮件
	m := gomail.NewMessage()
	m.SetHeader("From", hostEmail)
	m.SetHeader("To", email)
	m.SetHeader("Subject", "团委工程：你的注册验证码到了！")
	m.SetBody("text/plain", "验证码是: "+code)

	// 使用 163 SMTP 服务器并启用 SSL
	d := gomail.NewDialer("smtp.163.com", 465, hostEmail, hostPassword)
	d.SSL = true

	if err := d.DialAndSend(m); err != nil {
		fmt.Println("邮件发送失败:", err) // 输出错误信息到控制台
		return "", err
	}

	return code, nil
}
